using UnityEngine; using UnityEngine.UI; using System.Collections; using System.Collections.Generic; using EnhancedUI.EnhancedScroller; namespace EnhancedScrollerDemos.JumpToDemo { /// /// This demo shows how to jump to an index in the scroller. You can jump to a position before /// or after the cell. You can also include the spacing before or after the cell. /// public class Controller : MonoBehaviour, IEnhancedScrollerDelegate { /// /// In this example we are going to use a standard generic List. We could have used /// a SmallList for efficiency, but this is just a demonstration that other list /// types can be used. /// private List _data; /// /// Reference to the scrollers /// public EnhancedScroller vScroller; public EnhancedScroller hScroller; /// /// References to the UI elements /// public InputField jumpIndexInput; public Toggle useSpacingToggle; public Slider scrollerOffsetSlider; public Slider cellOffsetSlider; /// /// Reference to the cell prefab /// public EnhancedScrollerCellView cellViewPrefab; public EnhancedScroller.TweenType vScrollerTweenType = EnhancedScroller.TweenType.immediate; public float vScrollerTweenTime = 0f; public EnhancedScroller.TweenType hScrollerTweenType = EnhancedScroller.TweenType.immediate; public float hScrollerTweenTime = 0f; void Start() { // set up the scroller delegates vScroller.Delegate = this; hScroller.Delegate = this; // set up some simple data _data = new List(); for (var i = 0; i < 1000; i++) _data.Add(new Data() { cellText = "Cell Data Index " + i.ToString() }); // tell the scroller to reload now that we have the data vScroller.ReloadData(); hScroller.ReloadData(); } #region UI Handlers public void JumpButton_OnClick() { int jumpDataIndex; // extract the integer from the input text if (int.TryParse(jumpIndexInput.text, out jumpDataIndex)) { // jump to the index vScroller.JumpToDataIndex(jumpDataIndex, scrollerOffsetSlider.value, cellOffsetSlider.value, useSpacingToggle.isOn, vScrollerTweenType, vScrollerTweenTime); hScroller.JumpToDataIndex(jumpDataIndex, scrollerOffsetSlider.value, cellOffsetSlider.value, useSpacingToggle.isOn, hScrollerTweenType, hScrollerTweenTime); } else { Debug.LogWarning("The jump value you entered is not a number."); } } #endregion #region EnhancedScroller Handlers /// /// This tells the scroller the number of cells that should have room allocated. This should be the length of your data array. /// /// The scroller that is requesting the data size /// The number of cells public int GetNumberOfCells(EnhancedScroller scroller) { // in this example, we just pass the number of our data elements return _data.Count; } /// /// This tells the scroller what the size of a given cell will be. Cells can be any size and do not have /// to be uniform. For vertical scrollers the cell size will be the height. For horizontal scrollers the /// cell size will be the width. /// /// The scroller requesting the cell size /// The index of the data that the scroller is requesting /// The size of the cell public float GetCellViewSize(EnhancedScroller scroller, int dataIndex) { // in this example, even numbered cells are 30 pixels tall, odd numbered cells are 100 pixels tall for the vertical scroller // the horizontal scroller has a fixed cell size of 200 pixels if (scroller == vScroller) return (dataIndex % 2 == 0 ? 30f : 100f); else return (200f); } /// /// Gets the cell to be displayed. You can have numerous cell types, allowing variety in your list. /// Some examples of this would be headers, footers, and other grouping cells. /// /// The scroller requesting the cell /// The index of the data that the scroller is requesting /// The index of the list. This will likely be different from the dataIndex if the scroller is looping /// The cell for the scroller to use public EnhancedScrollerCellView GetCellView(EnhancedScroller scroller, int dataIndex, int cellIndex) { // first, we get a cell from the scroller by passing a prefab. // if the scroller finds one it can recycle it will do so, otherwise // it will create a new cell. CellView cellView = scroller.GetCellView(cellViewPrefab) as CellView; // set the name of the game object to the cell's data index. // this is optional, but it helps up debug the objects in // the scene hierarchy. cellView.name = "Cell " + dataIndex.ToString(); // in this example, we just pass the data to our cell's view which will update its UI cellView.SetData(_data[dataIndex]); // return the cell to the scroller return cellView; } #endregion } }